#ifndef __H__DATAMANAGE__H__
#define __H__DATAMANAGE__H__


#include "../CommDef/NDC300LHdef.h"

#include "xml.h"


#ifdef __cplusplus
extern "C"{
#endif


///////////////////////////////////////////////////////////////////////////
//封包解包部分
//////////////////////////////////////////////////////////////////////////

//功能：从图片中取出XML尾部信息
//参数：pic					[in]输入图片
//		picLen				[in]图片大小
//		outxml				[out]尾部XML信息
//		outLen				[out]尾部信息长度
//		inLen				[in]传入的outxml总长度，用来将outxml指向空间清0信息
//返回值: 1 - 成功, 0 - 失败
int Xml_GetTailFromPic(char *pic, int picLen, char *outxml, int *outLen, int inlen);

//通讯数据结构说明
//数据类型标识[12] + 数据长度[4] + 预留字节[16] + 数据[N] + 校验[1]
//PLATELIST\0[12] + 1024[4] + 0000000000000000[16] + 数据[N] + A[1]

//说明：生成用于通讯的数据(带有头结构[32字节],尾部校验[1字节]的数据)
//参数：SingString		[in]	头标识
//		inString		[in]	原始数据的内存地址
//		inLen			[in]	原始数据的长度
//		outString		[out]	用于存放加头尾后数据的首地址
//		outLen			[in/out]入是outString缓冲区的最大长度，出是加头尾后数据的长度
//返回：成功返回1，失败返回0
int32 Xml_MakeMessage(int8 SignString[32], uint8 *inString, int32 inLen, uint8 *outString, int32 *outLen);


//说明：生成用于通讯的数据(带有头结构[32字节],尾部校验[1字节]的数据)
//参数：SingString		[in]	头标识
//		String			[in/out]入是不带头数据和校验的原始数据 出是加上头数据和校验的数据
//		len			[in/out]原始数据的长度
//		bufLen			[in]	入是原始数据的长度
//返回：成功返回1，失败返回0
int32 Xml_MakeMessage1(int8 SignString[32], uint8 *String, int32 *len,int32 bufLen);
//说明：对接收到的数据(带有头结构[32字节],尾部校验[1字节]的数据)进行校验,并去掉头结构和尾部校验
//参数：inString		[in]	收到数据的内存地址
//		inLen			[in]	收到数据的长度
//		outString		[out]	用于存放去头尾后数据的首地址
//		outLen			[in/out]入是outString缓冲区的最大长度，出是去头尾后数据的长度
//返回：成功返回1，失败返回0
int32 Xml_JieXiMessage(int8 *inString, uint32 inLen, int8 *outString, uint32 *outLen);



///////////////////////////////////////////////////////////////////////////
//构建部分
//////////////////////////////////////////////////////////////////////////

//说明：生成图像参数数据(不带有头结构的XML数据)
//参数：pImageParam 	[in]	图像参数结构
//		string			[out]	用于存放图像参数数据的内存地址
//		stringlen		[in/out]输入时为内存地址大小, 输出时为图像参数数据实际大小
//返回：成功返回1，失败返回0
int32 Xml_MakeImageParamString(SImageParam *pImageParam, int8 *string, int32 *stringlen);

//说明：生成抓拍分辨率数据(不带有头结构的XML数据)
//参数：width		 	[in]	抓拍宽
//		height			[in]	抓拍高
//		string			[out]	用于存放图像参数数据的内存地址
//		stringlen		[in/out]输入时为内存地址大小, 输出时为图像参数数据实际大小
//返回：成功返回1，失败返回0
int32 Xml_MakeCapString(int32 width, int32 height, int8 *string, int32 *stringlen);

//说明：依据给定的节点数据构建XML字符串(不带有头结构的XML数据) 其路径都在
//xml/SystemConfig/SystemParam下
//参数：node			[in]	要构建的节点数据
//		string			[out]	用于存放系统配置参数数据的内存地址
//		stringlen		[in/out]输入时为内存地址大小, 输出时为系统配置参数数据实际大小
//返回：成功返回1，失败返回0

int32 Xml_MakeSysCfgStr(XMLNode *node, int8 *string, int32 *stringlen);

//说明：生成系统配置参数数据(不带有头结构的XML数据)
//参数：pSystemParam 	[in]	系统配置参数结构
//		string			[out]	用于存放系统配置参数数据的内存地址
//		stringlen		[in/out]输入时为内存地址大小, 输出时为系统配置参数数据实际大小
//返回：成功返回1，失败返回0
int32 Xml_MakeSystemConfigString(SSystemParam *pSystemParam, int8 *string, int32 *stringlen);

//说明：生成识别参数数据(不带有头结构的XML数据)
//参数：pRecParam	 	[in]	识别参数结构
//		string			[out]	用于存放识别参数数据的内存地址
//		stringlen		[in/out]输入时为内存地址大小, 输出时为识别参数数据实际大小
//返回：成功返回1，失败返回0
int32 Xml_MakeRecParamString(SRecParam *pRecParam, int8 *string, int32 *stringlen);

//说明：生成XML尾部信息数据(不带有头结构的XML数据)
//参数：pTailParam	 	[in]	尾部信息结构,这个参数不能为NULL
//		pPicParam		[in]	图像调光参数,这个参数为NULL时XML中将不包含这个信息
//		pRecParam		[in]	识别参数,这个参数为NULL时XML中将不包含这个信息
//		pImageParam		[in]	图像参数,这个参数为NULL时XML中将不包含这个信息
//		SSystemParam	[in]	系统参数,这个参数为NULL时XML中将不包含这个信息
//		pTailParam_VM		[in] 视频流模式下的尾部信息
//		string			[out]	用于存放尾部信息的内存地址
//		stringlen		[in/out]输入时为内存地址大小, 输出时为识别参数数据实际大小
//返回：成功返回1，失败返回0
int32 Xml_MakeTailInfoString(STailInfo *pTailParam, SCurPicParam *pPicParam, SRecParam *pRecParam,  SImageParam *pImageParam, SSystemParam *pSystemParam, STailInfo_VideoMode *pTailParam_VM, int8 *string, int32 *stringlen);

//说明：生成XML尾部信息数据(不带有头结构的XML数据)
//参数：pSpeedParam	 	[in]	测速信息结构,这个参数不能为NULL
//		string			[out]	用于存放尾部信息的内存地址
//		stringlen		[in/out]输入时为内存地址大小, 输出时为识别参数数据实际大小
//返回：成功返回1，失败返回0
int32 Xml_MakeSpeedInfoString(SSpeedInfo *pSpeedParam, int8 *string, int32 *stringlen);

//说明：生成当前图片参数的XML数据(不带有头结构的XML数据)
//参数：pParam	 		[in]	当前图片参数信息结构
//		string			[out]	用于存放尾部信息的内存地址
//		stringlen		[in/out]输入时为内存地址大小, 输出时为识别参数数据实际大小
//返回：成功返回1，失败返回0
int32 Xml_MakeCurPicParamString(SCurPicParam *pParam, int8 *string, int32 *stringlen);

//说明：生成XML格式的TFTP被动下载尾部信息数据(不带有头结构的XML数据)
//参数：STFTPTailInfo 	[in]	TFTP尾部信息结构
//		string			[out]	用于存放尾部信息的内存地址
//		stringlen		[in/out]输入时为内存地址大小, 输出时为识别参数数据实际大小
//返回：成功返回1，失败返回0
int32 Xml_MakeTFTPTailInfoString(STFTPTailInfo *pTailParam, int8 *string, int32 *stringlen);


//说明：生成XML格式的相机状态信息数据(不带有头结构的XML数据)
//参数：pStateParam 	[in]	相机状态结构
//		string			[out]	用于存放尾部信息的内存地址
//		stringlen		[in/out]输入时为内存地址大小, 输出时为识别参数数据实际大小
//返回：成功返回1，失败返回0
int32 Xml_MakeCammerStateString(SCammerState *pStateParam, int8 *string, int32 *stringlen);

//说明：生成侧装卡口参数数据(不带有头结构的XML数据)
//参数：pParam		 	[in]	侧装卡口参数结构
//		string			[out]	用于存放图像参数数据的内存地址
//		stringlen		[in/out]输入时为内存地址大小, 输出时为图像参数数据实际大小
//返回：成功返回1，失败返回0
int32 Xml_MakeSideParamString(s_side_param *pParam, int8 *string, int32 *stringlen);

//说明：生成调试信息参数数据(不带有头结构的XML数据)
//参数：pParam		 	[in]	调试信息参数结构
//		string			[out]	用于存放调试信息数据的内存地址
//		stringlen		[in/out]输入时为内存地址大小, 输出时为图像参数数据实际大小
//返回：成功返回1，失败返回0
int32 Xml_MakeDebugParamString(SUDPDebug *pParam, int8 *string, int32 *stringlen);
///////////////////////////////////////////////////////////////////////////
//解析部分
//////////////////////////////////////////////////////////////////////////

//函数功能		从XML信息中解析出系统配置参数
//XMLString		[in]XML信息
//len			[in]XML信息长度
//param			[out]系统配置参数
//返回值：		成功返回1，失败返回0
int32	Xml_JieXiSystemConfigXml(const char *XMLString, const int32 len, SSystemParam *param);

//函数功能		从XML信息中解析出识别配置参数
//XMLString		[in]XML信息
//len			[in]XML信息长度
//param			[out]识别配置参数
//返回值：		成功返回1，失败返回0
int32	Xml_JieXiRecParamXml(const char *XMLString, const int32 len, SRecParam *param);

//函数功能		从XML信息中解析出IP配置参数
//XMLString		[in]XML信息
//len			[in]XML信息长度
//ip			[out]IP地址
//mask			[out]子网掩码
//gate			[out]网关
//返回值：		成功返回1，失败返回0
int32	Xml_JieXiIPXml(const char *XMLString, int32 len, char *ip, char *mask, char *gate);

//函数功能		从XML信息中解析出图像配置参数
//XMLString		[in]XML信息
//len			[in]XML信息长度
//param			[out]图像配置参数
//返回值：		成功返回1，失败返回0
int32	Xml_JieXiImageParamXml(const char *XMLString, const int32 len, SImageParam *param);

//函数功能		从XML信息中解析出图像尾部信息
//XMLString		[in]XML信息
//len			[in]XML信息长度
//param			[out]图像尾部信息
//返回值：		成功返回1，失败返回0
int32	Xml_JieXiTailInofXml(const char *XMLString, const int32 len, STailInfo *param);
//函数功能		从XML信息中解析出TFTP尾部信息
//XMLString		[in]XML信息
//len			[in]XML信息长度
//param			[out]TFTP尾部信息
//返回值：		成功返回1，失败返回0
int32	Xml_JieXiTFTPTailInofXml(const char *XMLString, const int32 len, STFTPTailInfo *param);

//函数功能		从XML信息中解析出相机状态信息
//XMLString		[in]XML信息
//len			[in]XML信息长度
//param			[out]相机状态信息
//返回值：		成功返回1，失败返回0
int32	Xml_JieCammerStateXml(const char *XMLString, const int32 len, SCammerState *param);

//函数功能		从XML信息中解析出侧装卡口参数
//XMLString		[in]XML信息
//len			[in]XML信息长度
//param			[out]相机状态信息
//返回值：		成功返回1，失败返回0
int32	Xml_JieXiSideParamXml(const char *XMLString, const int32 len, s_side_param *param);



#ifdef __cplusplus
}
#endif
#endif	//__H__DATAMANAGE__H__
